package main

import "fmt"

/*
1.接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量
2.只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型
3.一个自定义类型可以实现多个接口
4.一个接口(比如A接口)可以继承多个别的接口(比如B,C接口),这时如果要实现A接口,也必须将B,C接口的方法全部实现
5.interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用那么会输出nil
6.空接口没有任何方法,所以可以认为所有类型都实现了空接口,也可以理解为我们可以把任何一个变量赋值给空接口
*/

type AI interface {
	ai()
}

type BI interface {
	bi()
}

type Stu struct {
}

func (s Stu) ai() {
	fmt.Println("实现了A接口")
}

func (s Stu) bi() {
	fmt.Println("实现了B接口")
}

func main() {
	var s Stu
	var a AI = s
	a.ai()
	var b BI = s
	b.bi()
}
